Role과 RoleBinding (RBAC)

Role-Based Access Control(RBAC)은 쿠버네티스 리소스에 대한 접근 권한을 관리합니다.

주요 구성 요소

클라우드 네트워크 개념과 비교

실습 예시

Role 정의 예시

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]      # 코어 API 그룹
  resources: ["pods"]  # 리소스 타입
  verbs: ["get", "watch", "list"]  # 허용되는 동작

ClusterRole 정의 예시

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

RoleBinding 정의 예시

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: jane  # 사용자 "jane"
  apiGroup: rbac.authorization.k8s.io
- kind: ServiceAccount
  name: default
  namespace: kube-system
roleRef:
  kind: Role
  name: pod-reader  # 위에서 정의한 Role
  apiGroup: rbac.authorization.k8s.io

ClusterRoleBinding 정의 예시

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-secrets-global
subjects:
- kind: Group
  name: manager  # "manager" 그룹의 모든 사용자
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: secret-reader  # 위에서 정의한 ClusterRole
  apiGroup: rbac.authorization.k8s.io

RBAC 관리

권한 확인

kubectl auth can-i get pods --namespace dev --as jane

Role 및 RoleBinding 확인

kubectl get roles
kubectl get rolebindings
kubectl get clusterroles
kubectl get clusterrolebindings

특정 Role 상세 정보 보기

kubectl describe role pod-reader

일반적인 사용 패턴